#ifndef USERINFOUTIL_H
#define USERINFOUTIL_H
#include "qregexp.h"
#include <QString>
#include <QSqlQuery>
#include <QCryptographicHash> // md5加密的库
#include<QDebug>
/*
 * Date:        2022/11/17
 * Name:        王宇轩
 * Student ID:  20301142
 * Description: 这个类存储登陆、注册、修改密码
 *              等方法异常判断的sql语句和相关方法。
*/
// 检查用户的注册密码是否正确
bool checkPsw(const QString& psw)
{
    // 密码长度为6-12位，且必须为数字、大小写字母或符号中至少2种
    QString reg = "^(?![\\d]+$)(?![a-zA-Z]+$)(?![^\\da-zA-Z]+$).{6,12}$";
    QRegExp rx(reg);
    bool ok = rx.exactMatch(psw);

    return ok;
}

// 检查注册的用户名格式是否正确
bool checkUsername(const QString & username)
{
    //密码长度为6-12位，且必须为数字、大小写字母或符号中至少2种
    QString reg = "^[a-zA-Z0-9_]{6,16}$";
    QRegExp rx(reg);
    bool ok = rx.exactMatch(username);

    return ok;
}

// 从数据库中查询当前注册用户是否存在
bool isUserExist(const QString & username){
    qDebug()<<username;
    //若用户完成输入，则在数据库中进行匹配
    QString sql=QString("select * from user where username='%1'")
                .arg(username);

    //创建执行语句对象
    QSqlQuery result(sql);

    //判断执行结果，判断是否存在该用户
    if(!result.next()){
       return false;
    }
    return true;

}

// 检查用户名和密码是否匹配
bool isUserAndPswMatch(const QString & username,const QString & password){
        QString psw =
            QCryptographicHash::hash(password.toLatin1(), QCryptographicHash::Md5).toHex();

        //若当前用户存在，则判断用户名和密码是否匹配
        QString sql=QString("select * from user where username='%1' and password='%2'")
                .arg(username,psw);

        QSqlQuery result(sql);
        //判断执行结果
        if(!result.next()){
            return false;
        }
        return true;
}
#endif // USERINFOUTIL_H
